#include "vtor_queue.h"

#ifdef __VTOR_QUEUE__

int8_t VtorQueue_Push(VtorQueue* eq, void* buf)
{
	if(eq->pushIdx + 1 % eq->unitCnt != eq->popIdx)
	{
		memcpy(&eq->queueBuf[eq->pushIdx * eq->unitSize], buf, eq->unitSize);
		eq->pushIdx++;
		eq->pushIdx %= eq->unitCnt;
	}
	else
	{
		VtorQueue_ErrorHandler(eq);
		// 想办法提示报错
		return 1;
	}
	return 0;
}

int8_t VtorQueue_Pop(VtorQueue* eq, void* buf)
{
	if(eq->popIdx != eq->pushIdx)
	{
		memcpy(buf, &eq->queueBuf[eq->popIdx * eq->unitSize], eq->unitSize);
		eq->popIdx++;
		eq->popIdx %= eq->unitCnt;
	}
	else
	{
		VtorQueue_ErrorHandler(eq);
		// 取不到有效数据，但不会报错
		return 1;
	}
	return 0;
}

int8_t VtorQueue_Get(VtorQueue* eq, void* buf)
{
	if(eq->popIdx != eq->pushIdx)
	{
		memcpy(buf, &eq->queueBuf[eq->popIdx * eq->unitSize], eq->unitSize);
	}
	else
	{
		VtorQueue_ErrorHandler(eq);
		// 取不到有效数据，但不会报错
		return 1;
	}
	return 0;
}


#endif // __VTOR_QUEUE__
